package trolling;

import org.apache.torque.NoRowsException;
import org.apache.torque.TooManyRowsException;
import org.apache.torque.Torque;
import org.apache.torque.TorqueException;
import org.apache.torque.util.Criteria;
import java.util.*;

import torque.generated.*;

import trolling.IO;

public class Menu {

	public final static String TORQUE_PROPS = new String(
			"torque-3.3//Torque.properties");

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			/*
			 * Initializing Torque
			 */
			Torque.init(TORQUE_PROPS);
			/*
			 * // INSERTS Cine cineVox = new Cine(); cineVox.setNomcine("Vox");
			 * cineVox.setAdresse("15 Rue Thiers, 38000 Grenoble, France");
			 * cineVox.save();
			 * 
			 * /* Using the convenience methods to handle the foreign keys.
			 * 
			 * Salle salle1 = new Salle(); salle1.setNumsalle(1);
			 * salle1.setCapacite(200); salle1.setCine(cineVox); // The object
			 * is passed salle1.save();
			 */
			new Menu();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Menu() {
		try {
			int choix;

			do {
				IO.clear();
				System.out.println("MAXIMUM TROLLING");
				System.out.println("1. Créer partie");
				System.out.println("3. Créer troll");
				System.out.println("4. Créer objet");
				System.out.println("0. Quitter");
				System.out.print("Choix : ");
				choix = IO.lireEntier();
				switch (choix) {
				case 1:
					this.creerPartie();
					break;
				case 3:
					this.creerTroll();
					break;
				case 4:
					this.creerObjet();
					break;
				}
			} while (choix != 0);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void creerPartie() {
		int largeur = 0;
		Vector<Troll> trolls = new Vector<Troll>();
		String nomtroll;
		IO.clear();
		System.out.println("CREER PARTIE");
		Integer choix = 0;

		try {
			Criteria crit = new Criteria();
			crit.add(TrollPeer.VIE, 0, Criteria.GREATER_THAN);
			List<Troll> totaltrolls = TrollPeer.doSelect(crit);

			while (largeur < 10 || largeur > 30) {
				System.out.print("Largeur plateau : ");
				largeur = IO.lireEntier();
			}
			int i = 0;
			do {
			do {
				Troll trolleph = totaltrolls.get(i);
				System.out.println(" :) " + trolleph.getNomtroll());
				System.out.println("   +A:" + trolleph.getAttaque());
				System.out.println("   +D:" + trolleph.getDegat());
				System.out.println("   +E:" + trolleph.getEsquive());
				System.out.println("   +V:" + trolleph.getVie());
				System.out.println("");
				System.out.println(" 1:Prec |2:Ajouter |3:Suiv |4:Lancer la partie");
				System.out.print("Choix : ");
				choix = IO.lireEntier();
				if (choix == 1) {
					i--;
					if (i < 0)
						i += totaltrolls.size();
				}
				if (choix == 3) {
					i++;
					if (i > totaltrolls.size()-1)
						i -= totaltrolls.size();
				}
				if (choix == 2)
					trolls.add(trolleph);
			} while (choix == 1 || choix==3);
			choix = 0;
			crit.addNotIn(TrollPeer.NOMTROLL, trolls);
			totaltrolls = TrollPeer.doSelect(crit);
			if (i != 0)
				i--;
			} while (choix == 4);
			do {
				Troll trolleph = totaltrolls.get(i);
				System.out.println(" :) " + trolleph.getNomtroll());
				System.out.println("   +A:" + trolleph.getAttaque());
				System.out.println("   +D:" + trolleph.getDegat());
				System.out.println("   +E:" + trolleph.getEsquive());
				System.out.println("   +V:" + trolleph.getVie());
				System.out.println("");
				System.out.println(" 1: Prec |2: Choix |3:Suiv");
				System.out.print("Choix : ");
				choix = IO.lireEntier();
				if (choix == 1) {
					i--;
					if (i < 0)
						i += totaltrolls.size();
				}
				if (choix == 3) {
					i++;
					if (i > totaltrolls.size()-1)
						i -= totaltrolls.size();
				}
				if (choix == 2)
					trolls.add(trolleph);

			} while (choix != 2);

			Partie partie = new Partie();
			partie.setLargeur(largeur);
			partie.save();

			/*for (String nt : trolls) {
				Troll troll = TrollPeer.retrieveByPK(nt);

			}*/
		} catch (Exception e) {
			System.out.println("Erreur création partie");
			System.out.println(e.getMessage());
		}

	}

	public void creerTroll() {
		String nom;
		String type = "standard";
		List<Integer> carac = new ArrayList<Integer>();
		carac.add(0);
		carac.add(0);
		carac.add(0);
		carac.add(0);
		int pointsRestant = 40;
		int choix;
		int nb;
		IO.clear();
		System.out.println("CREER TROLL");
		System.out.print("Nom du troll : ");
		nom = IO.lireChaine();
		int ok;
		do {
			do {
				System.out.println();
				System.out.println();
				System.out.print("Points restant : ");
				System.out.println(pointsRestant);
				System.out.println(" = = = = = = ");
				System.out.print("	1 - Attaque  : ");
				System.out.println(carac.get(0));
				System.out.print("	2 - Degats : ");
				System.out.println(carac.get(1));
				System.out.print("	3 - Esquive : ");
				System.out.println(carac.get(2));
				System.out.print("	4 - Vie : ");
				System.out.println(carac.get(3));
				if (carac.get(3) == 0) {
					System.out.println("Attention ! Votre troll est mort !");
				}
				do {
					System.out.print("Caracteristique a changer : ");
					choix = IO.lireEntier();
					if ((choix < 1) || (choix > 4)) {
						System.out.println("Mauvais choix (1 2 3 ou 4");
					}
				} while ((choix < 1) && (choix > 4));
				choix--;
				do {
					System.out.print("Modifier pour : ");
					nb = IO.lireEntier();
					if ((pointsRestant + carac.get(choix) - nb) < 0) {
						System.out.print("Il vous manque ");
						System.out
								.print(-(pointsRestant + carac.get(choix) - nb));
						System.out.print(" point(s) !");
					}
				} while ((pointsRestant + carac.get(choix) - nb) < 0);
				pointsRestant = (pointsRestant + carac.get(choix) - nb);
				carac.set(choix, nb);
			} while (pointsRestant > 0);
			System.out.println();
			System.out.println();
			System.out.println("Vos caracteristiques  : ");
			System.out.print("	Attaque  : ");
			System.out.println(carac.get(0));
			System.out.print("	Degats : ");
			System.out.println(carac.get(1));
			System.out.print("	Esquive : ");
			System.out.println(carac.get(2));
			System.out.print("	Vie : ");
			System.out.println(carac.get(3));
			if (carac.get(3) == 0) {
				System.out
						.println("Attention ! Votre troll est mort ! Il ne pourra pas jouer de partie");
			}
			System.out.println("Êtes vous satisfaits ?");
			System.out.println("	1 - Oui");
			System.out.println("	2 - Non");

			System.out.print("Choix : ");
			ok = IO.lireEntier();
		} while (ok == 2);
		try {
			Troll troll = new Troll();
			troll.setNomtroll(nom);
			troll.setXp(0);
			troll.setType(type);
			troll.setAttaque(carac.get(0));
			troll.setDegat(carac.get(1));
			troll.setEsquive(carac.get(2));
			troll.setVie(carac.get(3));
			troll.save();
		} catch (Exception e) {
			System.out.println("Un troll porte déjà ce nom !");
		}
	}

	public void creerObjet() {
		String nomobjet = "";
		String description;
		int type = 0;
		int duree = 0;
		int bonusattaque;
		int bonusdegat;
		int bonusesquive;
		int bonusvie;
		int bonuspa;
		Vector<String> types = new Vector<String>();
		types.add("Arme");
		types.add("Casque");
		types.add("Armure");
		types.add("Potion");
		IO.clear();
		System.out.println("CREER OBJET");
		while (nomobjet.equals("")) {
			System.out.print("Nom : ");
			nomobjet = IO.lireChaine();
		}
		while (!(type > 0 && type <= types.size())) {
			int n = 0;
			for (String t : types) {
				System.out.println("  " + ++n + " - " + t);
			}
			System.out.println("Type : ");
			type = IO.lireEntier();
		}
		type--;
		System.out.print("Description : ");
		description = IO.lireChaine();
		if (type == 3) {
			while (duree < 1) {
				System.out.print("Durée : ");
				duree = IO.lireEntier();
			}
		}
		System.out.print("Bonus attaque : ");
		bonusattaque = IO.lireEntier();
		System.out.print("Bonus dégats : ");
		bonusdegat = IO.lireEntier();
		System.out.print("Bonus esquive : ");
		bonusesquive = IO.lireEntier();
		System.out.print("Bonus vie : ");
		bonusvie = IO.lireEntier();
		System.out.print("Bonus points d'action : ");
		bonuspa = IO.lireEntier();

		try {
			Objet objet = new Objet();
			objet.setNomobjet(nomobjet);
			objet.setDescription(description);
			objet.setType(types.get(type));
			objet.setDuree(duree);
			objet.setBonusattaque(bonusattaque);
			objet.setBonusdegat(bonusdegat);
			objet.setBonusesquive(bonusesquive);
			objet.setBonusvie(bonusvie);
			objet.setBonuspa(bonuspa);
			objet.save();
		} catch (Exception e) {
			System.out.println("Un troll porte déjà ce nom !");
		}
	}
}
